#e[Single]
#Title[cޔwi]
#Text[Tv]
#ScriptVersion[2]

script_enemy_main{

	let current=GetCurrentScriptDirectory;
	let IMG=current~"ExRumia.png";
	let EFFECT_IMG=current~"bg.png";
	let Set_Y_Angle=0;
	let X=0;
	let Y=0;

	@Initialize{
		LoadGraphic(IMG);
		LoadGraphic(EFFECT_IMG);
		SetLife(6553500);
		SetDamageRate(0,0);
		SetTexture(IMG);
		SetGraphicRect(0,0,64,64);
		SetMovePosition02(GetCenterX,GetClipMinY+120,60);
		Main;
		Back_Effect_Z;
		Back_Effect;
	}

	@MainLoop{
		X++;
		Y++;
		if(X>=256){X-=256;}
		if(Y>=256){Y-=256;}
		SetCollisionA(GetX,GetY+15*sin(Set_Y_Angle),24);
		yield;
	}

	@DrawLoop{
		DrawGraphic(GetX,GetY+15*sin(Set_Y_Angle));
	}

	@Finalize{
	}

	task Main{
		yield;
		Graphic_Position;
	}

	task Graphic_Position{
		wait(60);
		loop{
			Set_Y_Angle++;
			if(Set_Y_Angle>=360){Set_Y_Angle-=360;}
			yield;
		}
	}

	task Back_Effect_Z{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,EFFECT_IMG);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj,4);
		ObjEffect_SetLayer(obj,0);
		Obj_SetPosition(obj,GetCenterX,GetCenterY);
		let wh;
		let xy;
		let uv;
		loop{
			wh=[GetClipMinX+X+GetX,GetClipMinY+Y,GetClipMaxX+X+GetX,GetClipMaxY+Y];
			xy=Cal_XY(wh[0],wh[1],wh[2],wh[3]);
			uv=Cal_UV(wh[0],wh[1],wh[2],wh[3]);
			ascent(vertex_number in 0..4){
				ObjEffect_SetVertexXY(obj,vertex_number,xy[vertex_number],xy[vertex_number+4]);
				ObjEffect_SetVertexUV(obj,vertex_number,uv[vertex_number],uv[vertex_number+4]);
			}
			yield;
		}
	}

	task Back_Effect{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,EFFECT_IMG);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_CreateVertex(obj,192);
		ObjEffect_SetLayer(obj,0);
		let Radius_A = [[0,25],[25,75],[75,100],[100,101]];
		let Radius_B = [[0,30],[30,50],[50,95],[95,101]];
		let Set_Radius_A;
		let Set_Radius_B;
		let Angle=0;
		let Pace=12.5;
		loop{
			ascent(vertex_number in 0..192){
				if(vertex_number < 48){
					Set_Radius_A = [Radius_A[0][0],Radius_A[0][1]];
					Set_Radius_B = [Radius_B[0][0],Radius_B[0][1]-Pace*cos(Angle)];
				}else if(vertex_number >= 48 && vertex_number < 96){
					Set_Radius_A = [Radius_A[1][0],Radius_A[1][1]];
					Set_Radius_B = [Radius_B[1][0]-Pace*cos(Angle),Radius_B[1][1]-Pace*cos(Angle)];
				}else if(vertex_number >= 96 && vertex_number < 144){
					Set_Radius_A = [Radius_A[2][0],Radius_A[2][1]];
					Set_Radius_B = [Radius_B[2][0]-Pace*cos(Angle),Radius_B[2][1]-Pace*cos(Angle)];
				}else{
					Set_Radius_A = [Radius_A[3][0],Radius_A[3][1]];
					Set_Radius_B = [Radius_B[3][0]-Pace*cos(Angle),Radius_B[3][1]];
				}
				ObjEffect_SetVertexXY(obj,vertex_number,GetX+Set_Radius_A[vertex_number%2]*cos((360/47)*vertex_number),GetY+25*sin(Set_Y_Angle)+Set_Radius_A[vertex_number%2]*sin((360/47)*vertex_number));
				ObjEffect_SetVertexUV(obj,vertex_number,(GetX+Set_Radius_B[vertex_number%2]*cos((360/47)*vertex_number))-GetClipMinX+X,(GetY+25*sin(Set_Y_Angle)+Set_Radius_B[vertex_number%2]*sin((360/47)*vertex_number))+Y);
				ObjEffect_SetVertexColor(obj,vertex_number,255,255,255,255);
			}
			Angle+=1.5;
			if(Angle>=360){Angle-=360;}
			yield;;
		}
	}

	function wait(let frame){loop(frame){yield;}}

	function Cal_XY(let wh_0, let wh_1, let wh_2, let wh_3){
		let xy=[-(wh_2-wh_0)/2,(wh_2-wh_0)/2,(wh_2-wh_0)/2,-(wh_2-wh_0)/2,-(wh_3-wh_1)/2,-(wh_3-wh_1)/2,(wh_3-wh_1)/2,(wh_3-wh_1)/2];
		return xy;
	}

	function Cal_UV(let wh_0, let wh_1, let wh_2, let wh_3){
		let uv=[wh_0,wh_2,wh_2,wh_0,wh_1,wh_1,wh_3,wh_3];
		return uv;
}

}